package com.aiwiown.snackmq.storage.service;

import com.aiwiown.snackmq.common.protocol.TopicPartition;

import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.List;

/**
 * 零拷贝存储服务接口
 * 支持直接返回ByteBuffer切片，避免内存拷贝
 */
public interface ZeroCopyStorageService {
    
    /**
     * 零拷贝读取消息
     * 直接返回ByteBuffer切片，由调用方负责内存管理
     * 
     * @param partition 主题分区
     * @param offset 起始偏移量
     * @param maxMessages 最大消息数量
     * @return ByteBuffer切片列表，每个切片包含一条消息的完整数据
     * @throws IOException 如果读取失败
     */
    List<ByteBuffer> readZeroCopy(TopicPartition partition, long offset, int maxMessages) throws IOException;
    
    /**
     * 零拷贝读取单条消息
     * 
     * @param partition 主题分区
     * @param offset 消息偏移量
     * @return ByteBuffer切片，包含消息的完整数据，如果消息不存在则返回null
     * @throws IOException 如果读取失败
     */
    ByteBuffer readMessageZeroCopy(TopicPartition partition, long offset) throws IOException;
    
    /**
     * 批量零拷贝读取
     * 
     * @param partition 主题分区
     * @param startOffset 起始偏移量
     * @param endOffset 结束偏移量
     * @return ByteBuffer切片列表
     * @throws IOException 如果读取失败
     */
    List<ByteBuffer> readRangeZeroCopy(TopicPartition partition, long startOffset, long endOffset) throws IOException;
} 